package com.simple.system.service;

import com.simple.framework.core.domain.dto.ExportExcelDto;
import com.simple.framework.core.domain.vo.PagingVo;
import com.simple.system.domain.dto.AddSysUserDto;
import com.simple.system.domain.dto.ListSysUserDto;
import com.simple.system.domain.dto.UpdateByLoginPasswordDto;
import com.simple.system.domain.dto.UpdateByLoginUserDto;
import com.simple.system.domain.entity.SysUser;
import com.simple.system.domain.vo.SysListUserSelectVo;
import com.simple.system.domain.vo.SysListUserVo;
import com.simple.system.domain.vo.SysUserDetailsVo;

import java.util.List;

/**
 * @Description 用户表(SysUser)表服务接口
 * @Author xiaoke
 * @Date 2024/8/10 18:00
 * @Version 1.0
 */
public interface SysUserService {

    /**
     * 获取所有用户
     *
     * @param dto 请求参数
     * @return PagingVo<SysListUserVo>
     */
    PagingVo<SysListUserVo> list(ListSysUserDto dto);


    /**
     * 根据用户Id-获取权限集合
     *
     * @param userId 用户Id
     * @return 权限集合
     */
    List<String> getUserPerms(Long userId);

    /**
     * 根据Id获取用户
     *
     * @param userId 用户Id
     * @return SysUserDetailsVo
     */
    SysUserDetailsVo getUserDetails(Long userId);

    /**
     * 根据用户名获取用户
     *
     * @param username 用户名
     * @return SysUserDetailsVo
     */
    SysUserDetailsVo getUserNameDetails(String username);

    /**
     * 新增用户
     *
     * @param dto 请求参数
     * @return 用户Id
     */
    Long create(AddSysUserDto dto);

    /**
     * 修改用户
     *
     * @param id  用户Id
     * @param dto 请求参数
     */
    void update(Long id, AddSysUserDto dto);

    /**
     * 修改当前登录用户
     *
     * @param dto 请求参数
     */
    void updateByLoginUser(UpdateByLoginUserDto dto);


    /**
     * 修改当前登录用户密码
     *
     * @param dto 请求参数
     */
    void updateByLoginPassword(UpdateByLoginPasswordDto dto);

    /**
     * 删除用户
     *
     * @param id 用户Id
     */
    void delete(Long id);

    /**
     * 根据手机号码-获取用户
     *
     * @param cellphone 手机号码
     * @return SysUser
     */
    SysUserDetailsVo getByCellphone(String cellphone);

    /**
     * 获取用户下拉列表
     *
     * @return List<SysList
     */
    List<SysListUserSelectVo> listSelect();


    /**
     * 登录更新用户信息
     *
     * @param sysUser 用户信息
     */
    void updateByLogin(SysUser sysUser);
    
    /**
     * 更新用户id城市
     *
     * @param id 用户id
     */
    void updateIpCityById(Long id);

    /**
     * 根据部门id检查部门下是否有用户
     *
     * @param deptId 部门id
     * @return List<SysListUserSelectVo>
     */
    boolean checkDeptByUser(Long deptId);

    /**
     * 导出用户列表
     *
     * @param dto 请求参数
     */
    List<SysListUserVo> export(ExportExcelDto<ListSysUserDto> dto);


}

